/**
 * 生成路由文件
 *
 * @author 普德施 pds.inc
 */
import _ from 'lodash'
const { spliceIndex } = require('./common')
/**
  * 获取路由方法
  * @param Array routes 路由集合
  * @returns
  */
export function getRoutes(routes) {
  // 生成路由
  createRoute(routes)
  return routes
}

/**
  * 递归生成路由
  * @param {*} arr
  */
function createRoute(arr) {
  for (let i = 0; i < arr.length; i++) {
    // 如果第一层中路由没有component这个属性就直接返回,如path:*
    if (arr[i].meta) {
      arr[i].meta = {
        ...arr[i].meta,
        // 标记路由已经被配置了，如果项目需要的话，要在路由拦截器里根据这个值做相应的处理
        require: true
      }
    }
    if (arr[i].component) {
        checkRoute(arr[i])

      // 有的话自动生成component,把传入上面手写的路由放进来
      // 判断是否layout组件
      checkRouteLayout(arr[i])

      // 递归子路由
      if (arr[i].children && arr[i].children.length > 0) {
        createRoute(arr[i].children)
      }
    }
  }
}

function checkRoute (arr) {
    if (typeof arr === 'string') {
        const val = spliceIndex(arr.component)
        arr.name = arr.name || val.replace(/\//g, '_')
        arr.path = arr.path || `/${val}`
    }
}

function checkRouteLayout (arr) {
    if (typeof arr.component === 'string') {
        if (arr.component === 'layout') {
            arr.component = (resolve) => require([`@/${arr.component}/index.vue`], resolve)
        } else {
          const component = _.replace(arr.component, '.', '/')
          arr.component = (resolve) => require([`@/views/${component}`], resolve)
        }
      }
}
